﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Dominio;
using Interfaces;

namespace Obligatorio1
{
    public partial class VentanaReposicion : Form
    {
        List<Tanque> Tanques;
        public VentanaReposicion(List<Tanque> Tanques)
        {
            InitializeComponent();
            this.Tanques = Tanques;
        }

        private void ConfirmarButton_Click(object sender, EventArgs e)
        {
            if (ValidarDatosIngresados())
            {
                ImpITanque it = new ImpITanque();
                foreach (Tanque tanque in Tanques)
                {
                    String tipoTanque = tanque.GetType().Name;
                    int idRepoManual = Int32.Parse(IdReposicionTextBox.Text);
                    switch (tipoTanque)
                    {
                        case "TanqueAgua":
                            TanqueAgua tanqueAgua = (TanqueAgua)tanque;
                            int litrosAgua=0;
                            int.TryParse(CantidadLitrosTextBox.Text,out litrosAgua);
                            if (validarCargaTanque(tanqueAgua,litrosAgua))
                            {
                                it.AgregarContenidoATanque(tanqueAgua, DateTime.Now, litrosAgua, idRepoManual);
                                tanqueAgua.Update();
                                MessageBox.Show("Correcto. El Tanque fue cargado.");
                            }
                            else
                            {
                                MessageBox.Show("Error. La cantidad a ingresar es superior a la capacidad");
                            }
                            break;
                        case "TanqueCombustible":
                            TanqueCombustible tanqueCombustible = (TanqueCombustible)tanque;
                            int litrosCombustible = 0;
                            int.TryParse(CantidadLitrosTextBox.Text, out litrosCombustible);
                            if (validarCargaTanque(tanqueCombustible, litrosCombustible))
                            {
                                it.AgregarContenidoATanque(tanqueCombustible, DateTime.Now, litrosCombustible, idRepoManual);
                                tanqueCombustible.Update();
                                MessageBox.Show("Correcto. El Tanque fue cargado.");
                            }
                            else
                            {
                                MessageBox.Show("Error. La cantidad a ingresar es superior a la capacidad");
                            }
                            break;
                        case "TanqueAceite":
                            TanqueAceite tanqueAceite = (TanqueAceite)tanque;
                            int litrosAceite = 0;
                            int.TryParse(CantidadLitrosTextBox.Text, out litrosAceite);
                            if (validarCargaTanque(tanqueAceite, litrosAceite))
                            {
                                if (tanqueAceite.EsValidaCantidadParaReposicion(litrosAceite))
                                {
                                    it.AgregarContenidoATanque(tanqueAceite, DateTime.Now, litrosAceite, idRepoManual);
                                    tanqueAceite.Update();
                                    MessageBox.Show("Correcto. El Tanque fue cargado.");
                                }
                                else{
                                    MessageBox.Show("Error. La cantidad a ingresar es superior al 90%");
                                }
                                    
                            }
                            break;

                    }
                }
            }

            this.Dispose();
        }

        private Boolean validarCargaTanque(Tanque UnTanque, int Litros)
        {
            ImpITanque it = new ImpITanque();
            return it.EsCantidadNuevaSuperiorCapacidad(UnTanque, Litros);
        }

        private bool ValidarDatosIngresados()
        {
            int cantidadLitros;
            if (CantidadLitrosTextBox.Text.Length == 0)
            {
                MessageBox.Show("Error. Ingrese una cantidad de litros.");
                return false;
            }
            if(!int.TryParse(CantidadLitrosTextBox.Text, out cantidadLitros))
            {
                MessageBox.Show("Error. Ingrese un numero en la cantidad de litros.");
                return false;
            }
            if (IdReposicionTextBox.Text.Length == 0)
            {
                MessageBox.Show("Error. Ingrese un id de reposicion.");
                return false;

            }
            return true;
        }


    }
}
